/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.compassion.action;

import com.opensymphony.xwork2.ActionContext;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.json.JSONObject;
import sv.com.compassion.dao.GenericoDAO;
import sv.com.compassion.entidades.Cdi;
import sv.com.compassion.entidades.Municipio;
import sv.com.compassion.util.ComunAction;
import sv.com.compassion.util.Constantes;
import sv.com.compassion.util.Fecha;
import sv.com.compassion.util.JqGrid;
import sv.com.compassion.util.RowsGrid;


/** Clase para obtener los CDI´s que se desea seleccionar al momento de invocar algún reporte. 
* @author grupo de Tesis
*/
public class ReportCdiAction extends ComunAction {
    private GenericoDAO genericoDAO;
    private Cdi cdi;
 
 /**
 *Constructor.  
 *@param GenericoDAO interface donde se encuentran los métodos para acceder a 
 * a las clases entidades, necesarias. 
 */   
public ReportCdiAction(GenericoDAO genericoDAO){
        this.genericoDAO = genericoDAO;
        cdi = new    Cdi();
        
        cdi.setIdMunicipio(new Municipio());
}   
/**
 * Busca el método que se ejecutara
 */ 
    @Override
    public String execute(){
        buscarMetodo(cdi);        
        return null;
    }
       
    @Override    
    public void agregarEntidad(Object o) {
    }
        @Override
    public void borrarEntidad(Object o) {
    }
    @Override
    public void editarEntidad(Object o) {
    }
    
    /**
     * Despliega los CDI's.
     * 
     */
    @Override
    public void alimentarGrid() {
        JqGrid jg = new JqGrid();
        
        int total = 0;
        List<Cdi> listaCdi = null;
        
        String query = "";
        
        Map session = ActionContext.getContext().getSession();
        String idUsuario = session.get("idUsuario").toString();
        String idCargo = session.get("idCargo").toString();  

        try{
                if(getSearch()!= null && getSearch().equals("true")){
                    
                }else{
                    if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8") || idCargo.equals("9")){
                        query = "SELECT c FROM Cdi c WHERE c.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "') "
                                + "and c.estCdi = 1 "
                                + "ORDER BY c.nomCdi " + getSord();
                    }else{
                        query = "SELECT c FROM Cdi c "
                                + "WHERE c.estCdi = 1 "
                                + "ORDER BY c.nomCdi " + getSord();
                    }
                }

                listaCdi = genericoDAO.find(query,getRows(),(getRows()*getPage())-getRows());
                if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8")){
                    query = "SELECT count(c) FROM Cdi c WHERE c.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "') "
                            + "and c.estCdi = 1 ";
                }else{
                    query = "SELECT count(c) FROM Cdi c "
                            + "WHERE c.estCdi = 1 ";
                }
                total = genericoDAO.countRow(query);
                //configuraciones basicas
                jg.setPage(getPage());
                jg.setRecords(total);
                jg.setTotal((int) Math.ceil((double) total / (double) getRows()));
                jg.setSord(getSord());
                jg.setSidx(getSidx());
               
                List<RowsGrid> rows = new ArrayList<RowsGrid>();            
                
                for(Cdi c: listaCdi){
                    RowsGrid r = new RowsGrid(); 
                    r.setId(c.getIdCdi().toString());
                    List cell = new ArrayList();
                    
                    cell.add(c.getNomCdi());
                    
                    r.setCell(cell);
                    rows.add(r);
                }

                jg.setRows(rows);
                JSONObject jo = JSONObject.fromObject(jg);
                enviarJsonNavegador(getResponse(), jo);
        }catch(Exception e){
            Logger.getLogger(ReportCdiAction.class.getName()).log(Level.SEVERE, null, e);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+e.getCause().toString(), getResponse());
        }
    }

    public Integer getIdCdi() {
        return cdi.getIdCdi();
    }

    public void setIdCdi(Integer idCdi) {
        cdi.setIdCdi(idCdi);
    }

    public String getNomCdi() {
        return cdi.getNomCdi();
    }

    public void setNomCdi(String nomCdi) {
        cdi.setNomCdi(nomCdi);
    }

    public String getDirCdi() {
        return cdi.getDirCdi();
    }

    public void setDirCdi(String dirCdi) {
        cdi.setDirCdi(dirCdi);
    }

    public int getEstCdi() {
        return cdi.getEstCdi();
    }

    public void setEstCdi(int estCdi) {
        cdi.setEstCdi(estCdi);
    }

    public String getTelCdi() {
        return cdi.getTelCdi();
    }

    public void setTelCdi(String telCdi) {
        cdi.setTelCdi(telCdi);
    }

    public String getFecIniCdi() {
        return Fecha.date2String(cdi.getFecIniCdi());
    }

    public void setFecIniCdi(String fecIniCdi) {
       try {
            cdi.setFecIniCdi(Fecha.string2Date(fecIniCdi));
        } catch (ParseException ex) {
            Logger.getLogger(CdiAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getFecCierreCdi() {
        return Fecha.date2String(cdi.getFecCierreCdi());
    }

    public void setFecCierreCdi(String fecCierreCdi) {
        try {
            cdi.setFecCierreCdi(Fecha.string2Date(fecCierreCdi));
        } catch (ParseException ex) {
            Logger.getLogger(CdiAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public int getAuAddUsr() {
        return cdi.getAuAddUsr();
    }

    public void setAuAddUsr(int auAddUsr) {
        cdi.setAuAddUsr(auAddUsr);
    }

    public String getAuAddDat() {
        return Fecha.date2String(cdi.getAuAddDat());
    }

    public void setAuAddDat(String auAddDat) {
        try {
            cdi.setAuAddDat(Fecha.string2Date(auAddDat));
        } catch (ParseException ex) {
            Logger.getLogger(CdiAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Integer getAuModUsr() {
        return cdi.getAuModUsr();
    }

    public void setAuModUsr(Integer auModUsr) {
        cdi.setAuModUsr(auModUsr);
    }

    public Date getAuModDat() {
        return cdi.getAuModDat();
    }

    public void setAuModDat(Date auModDat) {
        cdi.setAuModDat(auModDat);
    }

    public Integer getIdMunicipio() {
        return cdi.getIdMunicipio().getIdMunicipio();
    }

    public void setIdMunicipio(Integer idMunicipio) {
        cdi.getIdMunicipio().setIdMunicipio(idMunicipio);
    }
    
    @Override
    public void reporteXls() {
    } 
}
